package COBRANZA_MODELO;
import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.text.SimpleDateFormat;

public class COB_FACTURA{
	private double ID;
	private double ID_SUCURSAL;
	private double TIPO_MOVIMIENTO;
	private double ESTADO_ANULADO;
	private String TIPO_FACTURA;
	private double NUMERO_FACTURA;
	private Date FECHA_FACTURA;
	private String NIT;
	private double MONTO_NUMERAL;
	private String MONTO_LITERAL;
	private String CODIGO_CONTROL;
	private String NRO_AUTORIZACION;
         private String CARACTERISTICA;
         private double ID_SUCURSAL_PROVEEDOR;
        private Conexion con = null;
         private double ICE;
         private double EXCENTO;
         
        
        
	public COB_FACTURA(){
        
        }

	public COB_FACTURA(String NRO_AUTORIZACION,String CODIGO_CONTROL,String MONTO_LITERAL,double MONTO_NUMERAL,String NIT,Date FECHA_FACTURA,double NUMERO_FACTURA,String TIPO_FACTURA,double TIPO_MOVIMIENTO,double ID_SUCURSAL,double ID,String Caracteristica,double ID_SUCURSAL_PROVEEDOR){
            this.NRO_AUTORIZACION =NRO_AUTORIZACION;
            this.CODIGO_CONTROL =CODIGO_CONTROL;
            this.CARACTERISTICA=Caracteristica;
            this.MONTO_LITERAL =MONTO_LITERAL;
            this.MONTO_NUMERAL =MONTO_NUMERAL;
            this.NIT =NIT;
            this.ID_SUCURSAL_PROVEEDOR=ID_SUCURSAL_PROVEEDOR;
            this.FECHA_FACTURA =FECHA_FACTURA;
            this.NUMERO_FACTURA =NUMERO_FACTURA;
            this.TIPO_FACTURA =TIPO_FACTURA;
            this.TIPO_MOVIMIENTO =TIPO_MOVIMIENTO;
            this.ID_SUCURSAL =ID_SUCURSAL;
            this.ID =ID;
	}

    public double ID_SUCURSAL_PROVEEDOR() {
        return ID_SUCURSAL_PROVEEDOR;
    }

    public void ID_SUCURSAL_PROVEEDOR(double ID_SUCURSAL_PROVEEDOR) {
        this.ID_SUCURSAL_PROVEEDOR = ID_SUCURSAL_PROVEEDOR;
    }

    public double getICE() {
        return ICE;
    }

    public void setICE(double ICE) {
        this.ICE = ICE;
    }

    public double getEXCENTO() {
        return EXCENTO;
    }

    public void setEXCENTO(double EXCENTO) {
        this.EXCENTO = EXCENTO;
    }

	public int Insertar() throws SQLException{		
            String sucursal="null";
            String sucursalPr="null";
            if(ID_SUCURSAL!=0.0)
                sucursal =ID_SUCURSAL+"";
            
            if(ID_SUCURSAL_PROVEEDOR!=0.0)
                sucursalPr=ID_SUCURSAL_PROVEEDOR+"";
            
            String consulta = "insert into BROKER.COB_FACTURA(NRO_AUTORIZACION,CODIGO_CONTROL,MONTO_LITERAL,MONTO_NUMERAL,NIT,FECHA_FACTURA,NUMERO_FACTURA,TIPO_FACTURA,TIPO_MOVIMIENTO,ID_SUCURSAL,ID,ID_SUCURSAL_PROVEEDOR,ICE,EXCENTO,CARACTERISTICA,ESTADO_ANULADO) VALUES ('"+NRO_AUTORIZACION+"','"+CODIGO_CONTROL+"','"+MONTO_LITERAL+"',"+MONTO_NUMERAL+",'"+NIT+"',to_date('"+getFECHA_FACTURA()+"', 'DD/MM/YYYY HH:MI:SS'),"+NUMERO_FACTURA+",'"+TIPO_FACTURA+"',"+TIPO_MOVIMIENTO+","+sucursal+","+ID+","+sucursalPr+","+ICE+","+EXCENTO+",'"+CARACTERISTICA+"',"+ESTADO_ANULADO+")";
            con.EjecutarSentencia(consulta);
            consulta = "select BROKER.COB_FACTURA_SEQ.currval as ID from dual";
            ResultSet rs =con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("ID");		
	}
	public boolean actualizar() throws SQLException{
            String sucursal="null";
            String sucursalPr="null";
            if(ID_SUCURSAL!=0.0)
                sucursal =ID_SUCURSAL+"";
            
            if(ID_SUCURSAL_PROVEEDOR!=0.0)
                sucursalPr=ID_SUCURSAL_PROVEEDOR+"";
            
            String consulta = "update BROKER.COB_FACTURA set NRO_AUTORIZACION='"+NRO_AUTORIZACION+"',CODIGO_CONTROL='"+CODIGO_CONTROL+"',MONTO_LITERAL='"+MONTO_LITERAL+"',MONTO_NUMERAL="+MONTO_NUMERAL+",NIT='"+NIT+"',FECHA_FACTURA="+"to_date('"+getFECHA_FACTURA()+"', 'DD/MM/YYYY HH:MI:SS')"+",NUMERO_FACTURA="+NUMERO_FACTURA+",TIPO_FACTURA='"+TIPO_FACTURA+"',TIPO_MOVIMIENTO="+TIPO_MOVIMIENTO+",ID_SUCURSAL="+sucursal+",ID_SUCURSAL_PROVEEDOR="+sucursalPr+",ICE="+ICE+",EXCENTO="+EXCENTO+",CARACTERISTICA='"+CARACTERISTICA+"',ESTADO_ANULADO="+ESTADO_ANULADO+" where ID="+ID;
            con.EjecutarSentencia(consulta);
            return true;		
	}

	public boolean EliminarXid(){
		try{
			String consulta = "delete from BROKER.COB_FACTURA where ID = "+getID();
			con.EjecutarSentencia(consulta);
			return true;
			}
		catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}

	public COB_FACTURA BuscarXid(double id){
		try{String consulta = "select * from BROKER.COB_FACTURA where ID = "+id;
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs).get(0);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public double getNroFactura() throws SQLException
        {
            String consulta = "SELECT (MAX(c.NUMERO_FACTURA)+1) as numero FROM BROKER.COB_FACTURA c, BROKER.CON_PARAMETROS_FACTURAS p WHERE (c.NRO_AUTORIZACION = p.NRO_AUTORIZACION) AND (c.NUMERO_FACTURA <= p.NRO_FINAL_DOSIFICACION) GROUP BY c.NRO_AUTORIZACION";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getDouble("numero");
        }
        
	

	public List<COB_FACTURA> Todos(){
		try{String consulta = "select * from BROKER.COB_FACTURA where ESTADO_ANULADO=0";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
	public List<COB_FACTURA> TodosAnuladas(){
		try{String consulta = "select * from BROKER.COB_FACTURA where ESTADO_ANULADO=1";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public COB_FACTURA Buscar() throws SQLException{
            String consulta = "select * from BROKER.COB_FACTURA where CODIGO_CONTROL like( '"+CODIGO_CONTROL+"')";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs).get(0);
	}

        public void anular(double id) throws SQLException
        {
            String consulta = "update BROKER.COB_FACTURA set ESTADO_ANULADO = 1 where ID = "+id;
            con.EjecutarSentencia(consulta);
        }
        
	public List<COB_FACTURA> Cargar(ResultSet rs){
		try{
			List<COB_FACTURA> lista = new ArrayList<COB_FACTURA>();
			while(rs.next()){
				COB_FACTURA objeto = new COB_FACTURA();

				objeto.setNRO_AUTORIZACION(rs.getString("NRO_AUTORIZACION"));
				objeto.setCODIGO_CONTROL(rs.getString("CODIGO_CONTROL"));
				objeto.setMONTO_LITERAL(rs.getString("MONTO_LITERAL"));
				objeto.setMONTO_NUMERAL(rs.getDouble("MONTO_NUMERAL"));
				objeto.setCARACTERISTICA(rs.getString("CARACTERISTICA"));
				objeto.setICE(rs.getDouble("ICE"));
				objeto.setEXCENTO(rs.getDouble("EXCENTO"));
				objeto.setID_SUCURSAL_PROVEEDOR(rs.getDouble("ID_SUCURSAL_PROVEEDOR"));
				objeto.setNIT(rs.getString("NIT"));
				objeto.setFECHA_FACTURA(rs.getDate("FECHA_FACTURA"));
				objeto.setNUMERO_FACTURA(rs.getDouble("NUMERO_FACTURA"));
				objeto.setTIPO_FACTURA(rs.getString("TIPO_FACTURA"));
				objeto.setTIPO_MOVIMIENTO(rs.getDouble("TIPO_MOVIMIENTO"));
				objeto.setID_SUCURSAL(rs.getDouble("ID_SUCURSAL"));
				objeto.setID(rs.getDouble("ID"));
				objeto.setESTADO_ANULADO(rs.getDouble("ESTADO_ANULADO"));
                                
				 objeto.setCon(con);
				lista.add(objeto);
			}
			return lista;
		}
		catch(SQLException ex){
			ex.printStackTrace();
		return null;}
	}

	public String getNRO_AUTORIZACION(){
		return NRO_AUTORIZACION;
	}
	public void setNRO_AUTORIZACION(String NRO_AUTORIZACION){
		this.NRO_AUTORIZACION=NRO_AUTORIZACION;
	}

	public String getCODIGO_CONTROL(){
		return CODIGO_CONTROL;
	}
	public void setCODIGO_CONTROL(String CODIGO_CONTROL){
		this.CODIGO_CONTROL=CODIGO_CONTROL;
	}

	public String getMONTO_LITERAL(){
		return MONTO_LITERAL;
	}
	public void setMONTO_LITERAL(String MONTO_LITERAL){
		this.MONTO_LITERAL=MONTO_LITERAL;
	}

	public double getMONTO_NUMERAL(){
		return MONTO_NUMERAL;
	}
	public void setMONTO_NUMERAL(double MONTO_NUMERAL){
		this.MONTO_NUMERAL=MONTO_NUMERAL;
	}

	public String getNIT(){
             if(NIT==null || NIT.equals(""))
                 return "0";
		return NIT;
	}
	public void setNIT(String NIT){
		this.NIT=NIT;
	}

	public String getFECHA_FACTURA(){
	SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
		return sdf2.format(FECHA_FACTURA);
	}
	public void setFECHA_FACTURA(Date FECHA_FACTURA){
		this.FECHA_FACTURA=FECHA_FACTURA;
	}

	public double getNUMERO_FACTURA(){
		return NUMERO_FACTURA;
	}
	public void setNUMERO_FACTURA(double NUMERO_FACTURA){
		this.NUMERO_FACTURA=NUMERO_FACTURA;
	}

	public String getTIPO_FACTURA(){
		return TIPO_FACTURA;
	}
	public void setTIPO_FACTURA(String TIPO_FACTURA){
		this.TIPO_FACTURA=TIPO_FACTURA;
	}

	public double getTIPO_MOVIMIENTO(){
		return TIPO_MOVIMIENTO;
	}
	public void setTIPO_MOVIMIENTO(double TIPO_MOVIMIENTO){
		this.TIPO_MOVIMIENTO=TIPO_MOVIMIENTO;
	}

	public double getID_SUCURSAL(){
		return ID_SUCURSAL;
	}
	public void setID_SUCURSAL(double ID_SUCURSAL){
		this.ID_SUCURSAL=ID_SUCURSAL;
	}

	public double getID(){
		return ID;
	}
	public void setID(double ID){
		this.ID=ID;
	}

	public Conexion getCon() {
		return con;
	}
	public void setCon(Conexion con) {
		this.con = con;
	}

    public double getESTADO_ANULADO() {
        return ESTADO_ANULADO;
    }

    public void setESTADO_ANULADO(double ESTADO_ANULADO) {
        this.ESTADO_ANULADO = ESTADO_ANULADO;
    }

    public String getCARACTERISTICA() {
        return CARACTERISTICA;
    }

    public void setCARACTERISTICA(String CARACTERISTICA) {
        this.CARACTERISTICA = CARACTERISTICA;
    }

    public double getID_SUCURSAL_PROVEEDOR() {
        return ID_SUCURSAL_PROVEEDOR;
    }

    public void setID_SUCURSAL_PROVEEDOR(double ID_SUCURSAL_PROVEEDOR) {
        this.ID_SUCURSAL_PROVEEDOR = ID_SUCURSAL_PROVEEDOR;
    }
        
    
}
